﻿<%@ WebHandler Language="C#" Class="HandlerSearch" %>

using System;
using System.Web;
using System.Data.SqlClient;                                               //這段常用到
using System.Collections.Generic;
using Newtonsoft.Json;

public class HandlerSearch : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        string status = context.Request.QueryString["status"];
        switch (status)
        {   
            case "searchText":
                
                List<string> searchList = new List<string>();                             //這變數要拿來存傳回來的資料→改陣列
                string strConn = LinkToDatabase.strConn;                           /*跟資料庫連接的方式 = 地址 把地址存到strConn變數
                                                                                                                        * 昌哥已經把地址寫好了 為了要統一使用*/
                string text = context.Request.QueryString["search"];               //get→QueryString
                using (SqlConnection conn = new SqlConnection(strConn))            //SqlConnection是郵差 把strConn這個地址給郵差
                {
                    string strCmd = @" select top 10 * from(select distinct unboxing_article_title from unboxing_article)as temp
                                          where unboxing_article_title like @searchText
                                          order by unboxing_article_title desc"; //要跟資料庫講甚麼話
                    using (SqlCommand cmd = new SqlCommand(strCmd, conn))          //叫郵差去這個地址講要傳遞的話
                    {
                        conn.Open();                                               //到這間去按門鈴(開門)
                        cmd.Parameters.AddWithValue("searchText", "%"+text+"%");
                        SqlDataReader reader = cmd.ExecuteReader();                /*cmd.ExecuteReader()編譯回傳的內容存到reader變數
                                                                                     是SqlDataReader 這個型態*/
                        while (reader.Read())                                      //reader.Read()是否有資料 當有資料時做裡面的事
                        {                                                          //處理那些資料
                            searchList.Add(reader["unboxing_article_title"].ToString());
                        }
                        conn.Close();                                              //郵差任務結束 可以回來了
                    }
                }

                context.Response.ContentType = "application/json";                     //轉型 把陣列轉成Json格式來回傳
                context.Response.Write(JsonConvert.SerializeObject(searchList));
                
                break;

            case "getSearchItems":
                context.Response.ContentType = "application/json";                     //轉型 把陣列轉成Json格式來回傳
                context.Response.Write(JsonConvert.SerializeObject("123"));
                break;

            case "keyword":

                List<string> keywordList = new List<string>();                             //這變數要拿來存傳回來的資料→改陣列
                string keystrConn = LinkToDatabase.strConn;                           /*跟資料庫連接的方式 = 地址 把地址存到strConn變數
                                                                                                                        * 昌哥已經把地址寫好了 為了要統一使用*/
                
                using (SqlConnection conn = new SqlConnection(keystrConn))            //SqlConnection是郵差 把strConn這個地址給郵差
                {
                    string strCmd = @" select top(3) keyword  from keyword  order by keyword_count desc";    //要跟資料庫講甚麼話
                    using (SqlCommand cmd = new SqlCommand(strCmd, conn))          //叫郵差去這個地址講要傳遞的話
                    {
                        conn.Open();                                               //到這間去按門鈴(開門)
                        
                        SqlDataReader reader = cmd.ExecuteReader();                /*cmd.ExecuteReader()編譯回傳的內容存到reader變數
                                                                                     是SqlDataReader 這個型態*/
                        while (reader.Read())                                      //reader.Read()是否有資料 當有資料時做裡面的事
                        {                                                          //處理那些資料
                            keywordList.Add(reader["keyword"].ToString());
                        }
                        conn.Close();                                              //郵差任務結束 可以回來了
                    }
                }

                context.Response.ContentType = "application/json";                     //轉型 把陣列轉成Json格式來回傳
                context.Response.Write(JsonConvert.SerializeObject(keywordList));

                break;
                
            case "Writekeyword":
               
                string writestrConn = LinkToDatabase.strConn;                           /*跟資料庫連接的方式 = 地址 把地址存到strConn變數
                                                                                                                        * 昌哥已經把地址寫好了 為了要統一使用*/
                string write = context.Request.QueryString["search"];               //get→QueryString
                using (SqlConnection conn = new SqlConnection(writestrConn))            //SqlConnection是郵差 把strConn這個地址給郵差
                {
                    string WstrCmd = "IF EXISTS (SELECT * FROM keyword " +
                                         "WHERE keyword = @searchText ) " +
                                         "UPDATE keyword SET [keyword_count]=[keyword_count]+1 " +
                                         "WHERE keyword = @searchText " +
                                         "ELSE " +
                                         "INSERT INTO keyword (keyword,keyword_count) VALUES (@searchText,1)";
                    using (SqlCommand cmd = new SqlCommand(WstrCmd, conn))
                    {
                        cmd.Parameters.AddWithValue("searchText", write);
                       
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                break;
        }
        
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}